From: Benjamin Otte Date: Sun, 17 Sep 2023 04:26:16 +0000 (+0200) Subject: gl: gradients should transition in unpremultiplied space X-Git-Tag: archive/raspbian/4.12.4+ds-3+rpi1^2~21^2~2^2~9 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/%22mailto:kde%40ewsoftware.de/%22style.css//%22node%24level1.%24level2.html/%22/%22http:/www.example.com/%22mailto:kde%40ewsoftware.de/%22style.css/%22node%24level1.%24level2.html/%22?a=commitdiff_plain;h=521f8a11d8d2e0686301d93fcab9821b1eea9608;p=gtk4.git gl: gradients should transition in unpremultiplied space So make the gradient shaders do that. --- diff --git a/gsk/gl/resources/conic_gradient.glsl b/gsk/gl/resources/conic_gradient.glsl index f1d33cd6a7..eaa04aa3ad 100644 --- a/gsk/gl/resources/conic_gradient.glsl +++ b/gsk/gl/resources/conic_gradient.glsl @@ -75,10 +75,10 @@ void main() { if (offset < next_offset) { float f = (offset - curr_offset) / (next_offset - curr_offset); - vec4 curr_color = gsk_premultiply(get_color(i)); - vec4 next_color = gsk_premultiply(get_color(i + 1)); + vec4 curr_color = get_color(i); + vec4 next_color = get_color(i + 1); vec4 color = mix(curr_color, next_color, f); - gskSetScaledOutputColor(color, u_alpha); + gskSetScaledOutputColor(gsk_premultiply(color), u_alpha); return; } } diff --git a/gsk/gl/resources/linear_gradient.glsl b/gsk/gl/resources/linear_gradient.glsl index fa130be4cb..8a7a557f8e 100644 --- a/gsk/gl/resources/linear_gradient.glsl +++ b/gsk/gl/resources/linear_gradient.glsl @@ -97,10 +97,10 @@ void main() { if (offset < next_offset) { float f = (offset - curr_offset) / (next_offset - curr_offset); - vec4 curr_color = gsk_premultiply(get_color(i)); - vec4 next_color = gsk_premultiply(get_color(i + 1)); + vec4 curr_color = get_color(i); + vec4 next_color = get_color(i + 1); vec4 color = mix(curr_color, next_color, f); - gskSetScaledOutputColor(color, u_alpha); + gskSetScaledOutputColor(gsk_premultiply (color), u_alpha); return; } } diff --git a/gsk/gl/resources/radial_gradient.glsl b/gsk/gl/resources/radial_gradient.glsl index 59fad00290..d03ca96b8c 100644 --- a/gsk/gl/resources/radial_gradient.glsl +++ b/gsk/gl/resources/radial_gradient.glsl @@ -77,10 +77,10 @@ void main() { if (offset < next_offset) { float f = (offset - curr_offset) / (next_offset - curr_offset); - vec4 curr_color = gsk_premultiply(get_color(i)); - vec4 next_color = gsk_premultiply(get_color(i + 1)); + vec4 curr_color = get_color(i); + vec4 next_color = get_color(i + 1); vec4 color = mix(curr_color, next_color, f); - gskSetScaledOutputColor(color, u_alpha); + gskSetScaledOutputColor(gsk_premultiply(color), u_alpha); return; } }